package com.douma._2022;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.TreeSet;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 最长广播响应 {
    private static TreeSet<Integer>[] graph;
    private static boolean[] visited;

    // 记录最大距离
    private static int maxDis = 0;

    // 思路：这道题目的本质就是求图的单源最长路径，使用 BFS 可以实现
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int l = sc.nextInt();
        sc.nextLine();

        // 1. 构建图
        graph = new TreeSet[n];
        for (int i = 0; i < n; i++) {
            graph[i] = new TreeSet<>();
        }

        for (int i = 0; i < l; i++) {
            // 减 1 是因为：顶点是从 1 开始，而数组下标是从 0 开始的
            int v = sc.nextInt() - 1;
            int w = sc.nextInt() - 1;
            graph[v].add(w);
            graph[w].add(v);

            sc.nextLine();
        }

        visited = new boolean[n];

        // 2. 从源点开始 BFS (一层一层遍历)，求最大的层数
        int source = sc.nextInt() - 1;
        bfs(source);

        // maxDis 包含了 source 这个点，所以需要减去
        System.out.println((maxDis - 1) * 2);

        sc.close();
    }

    private static void bfs(int v) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(v);
        visited[v] = true;

        while (!queue.isEmpty()) {
            // 遍历一层
            maxDis++;
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                int curr = queue.poll();

                for (int w : graph[curr]) {
                    if (!visited[w]) {
                        queue.add(w);
                        visited[w] = true;
                    }
                }
            }
        }
    }
}
